package com.zhong;

import com.zhong.po.User;
import org.junit.Test;

import java.lang.reflect.Field;

/**
 *  Java反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；
 *     对于任意一个对象，都能够调用它的任意一个方法和属性；
 */

//TODO: 每一个属性都会封装程一个Field 对象
//getDeclaredFields()               返回Field数组，所有的，不包括父类
//getFields()                       返回Field数组，只能是public
//getField(String name)           根据name返回Field对象，只能是public
//getDeclaredField(String name)     根据name返回Field对象，所有的
public class FieldDemo {

    @Test
    public void demo1() throws Exception{
        Class<?> clazz1 = Class.forName("com.zhong.po.User");

        //返回Field数组，所有的，不包括父类
        Field[] declaredFields = clazz1.getDeclaredFields();
        for(Field field : declaredFields){
            System.err.println(field.getName());
        }
    }


    /**
     *  返回Field数组，只能是public, 不包括父类
     * @throws Exception
     */
    @Test
    public void demo2() throws Exception{
        Class<?> clazz1 = Class.forName("com.zhong.po.User");

        //返回Field数组，所有的，不包括父类
        Field[] fields = clazz1.getFields();
        for(Field field : fields){
            System.err.println(field.getName());
        }
    }

    @Test
    public void demo3() throws Exception{
        Class<?> clazz1 = Class.forName("com.zhong.po.User");

        Field age = clazz1.getField("age");
        System.err.println(age);

        //根据name返回Field对象，所有的
        Field name = clazz1.getDeclaredField("name");
        System.err.println(name);

    }
}
